package org.mendoza.salud.hvt.client.shared.model.global;

import org.jboss.errai.common.client.api.annotations.Portable;
import org.jboss.errai.databinding.client.api.Bindable;
import org.mendoza.salud.hvt.client.shared.model.AbstractEntity;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import java.util.Date;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: Ricardo
 * Date: 06/11/13
 * Time: 10:53
 * To change this template use File | Settings | File Templates.
 */
@Entity
@Portable
@Bindable
@NamedQueries(value = {
        @NamedQuery(name = "Persona.All", query = "select p from Persona p"),
        @NamedQuery(name = "Persona.By.fechaDeNacimiento", query = "select p from Persona p where p.fechaDeNacimiento=:fechaDeNacimiento")
})

public class Persona extends AbstractEntity {

    @NotNull
    //@Boost(1.0f)
    private String nombres;
    @NotNull
    //@Boost(2.75f)
    private String apellidos;
    @NotNull
    @Temporal(TemporalType.DATE)
    @Past
    //@Boost(1.75f)
    private Date fechaDeNacimiento;
    @Temporal(TemporalType.DATE)
    @Past
    private Date fechaDeFallecimiento;
    @NotNull
    @OneToMany(mappedBy = "persona", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Documento> Documentos;

    @Enumerated
    @NotNull
    private Sexo sexo;

    public Persona() {
    }

    public Persona(String nombres, String apellidos, Date fechaDeNacimiento, Date fechaDeFallecimiento, List<Documento> documentos, Sexo sexo) {
        this.nombres = nombres;
        this.apellidos = apellidos;
        this.fechaDeNacimiento = fechaDeNacimiento;
        this.fechaDeFallecimiento = fechaDeFallecimiento;
        Documentos = documentos;
        this.sexo = sexo;
    }

    @Override
    public String toString() {
        java.sql.Date fn = null;
        if (getFechaDeNacimiento() != null) fn = new java.sql.Date(getFechaDeNacimiento().getTime());
        return "[Persona] {" + getApellidos() + ", " + getNombres() + ", " + fn + "}";
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public Date getFechaDeNacimiento() {
        return fechaDeNacimiento;
    }

    public void setFechaDeNacimiento(Date fechaDeNacimiento) {
        this.fechaDeNacimiento = fechaDeNacimiento;
    }

    public List<Documento> getDocumentos() {
        return Documentos;
    }

    public void setDocumentos(List<Documento> documentos) {
        Documentos = documentos;
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

    public Date getFechaDeFallecimiento() {
        return fechaDeFallecimiento;
    }

    public void setFechaDeFallecimiento(Date fechaDeFallecimiento) {
        this.fechaDeFallecimiento = fechaDeFallecimiento;
    }

    @Portable
    public enum Sexo {
        FEMENINO, MASCULINO, INDEFINIDO
    }


}
